package JDKdynamicProxy;

import java.lang.reflect.Proxy;

/**
 * @Author:zimmor
 * @Date: 2021/3/25 9:49
 * @Description 动态代理测试类
 * @version: 1.0.0
 */

public class DynamicProxyDemo {
    public static void main(String[] args) {
        //使用jdk动态代理有以下两个条件
        //1.有实现了接口的被代理对象
        //2.有事项invocationHandler接口的处理器类


        //使用动态代理的步骤
        //1.new要被代理的对象
        Buyer1 buyer1 = new Buyer1();
        //2.得到代理对象
        Subject proxy1 = (Subject)Proxy.newProxyInstance(buyer1.getClass().getClassLoader(), buyer1.getClass().getInterfaces(), new DynamicProxyHandler(buyer1));
        //3.通过代理来调用目标对象中的方法
        proxy1.buybuybuy();
        //再来一个要被代理的对象
        Buyer2 buyer2 = new Buyer2();
        Subject proxy2 = (Subject)Proxy.newProxyInstance(buyer2.getClass().getClassLoader(), buyer2.getClass().getInterfaces(), new DynamicProxyHandler(buyer2));
        System.out.println("proxy2.getName() = " + proxy2.getName());
        System.out.println("proxy2.getAge(\"小何\") = " + proxy2.getAge("小何"));
        System.out.println("proxy2.getAge(\"小明\") = " + proxy2.getAge("小明"));

    }
}
